#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
#include <sys/sem.h>

// union semun
// {
//     int val;
//     struct  semid_ds *buf;
//     unsigned short *array;
//     struct seminfo *_buf;
// };

int main()
{
    //创建key
    key_t key = ftok(".",'q');
    if (-1==key)
    {
        printf("创建key失败:%m\n");
        exit(-1);
    }
    printf("创建key 成功\n");
    //创建信号量
    int semid = semget(key,1,IPC_CREAT|0666);
    if (-1==semid)
    {
        printf("获取信号量失败:%m\n");
        exit(-1);
    }


    printf("获取信号量成功\n");


    //使用信号量
    struct sembuf buf;
    buf.sem_num=0;
    buf.sem_op=2;
    buf.sem_flg = 0;
    int n=0;
    int r = 0;
    while (1)
    {
        printf("买%d辆车\n",n++);
        r= semop(semid,&buf,1);
        if (-1==r)
        {
            printf("semop失败:%m\n");
        }else
        {
            printf("semop成功\n");
        }
        sleep(1);
    }
}